﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Problema
{
    public partial class ListadoProblema : Form
    {
        private AccesoDatos.USUARIO usuarioSistema;
        List<AccesoDatos.PROBLEMA> listaProblemaHardware;
        List<AccesoDatos.PROBLEMA> listaProblemaSoftware;

        public ListadoProblema()
        {
            InitializeComponent();

            listaProblemaHardware = new List<AccesoDatos.PROBLEMA>();
            listaProblemaSoftware = new List<AccesoDatos.PROBLEMA>();
        }

        public ListadoProblema(AccesoDatos.USUARIO usuariosistema)
            : this()
        {
            usuarioSistema = usuariosistema;
        }

        private void ListadoProblema_Load(object sender, EventArgs e)
        {
            ListarAsistenteReparador();
            cmbAsistenteReparador.SelectedIndex = cmbAsistenteReparador.Items.Count > 0 ? cmbAsistenteReparador.Items.IndexOf(cmbAsistenteReparador.Items.Cast<AccesoDatos.USUARIO>().SingleOrDefault(x => x.ID.Equals(usuarioSistema.ID))) : -1;
        }

        private void ListarAsistenteReparador()
        {
            LogicaNegocio.UsuarioBLL usuarioBLL = new LogicaNegocio.UsuarioBLL();
            cmbAsistenteReparador.DataSource = usuarioBLL.ListarAsistenteReparador();
            cmbAsistenteReparador.ValueMember = "ID";
            cmbAsistenteReparador.DisplayMember = "NOMBRECOMPLETO";
            cmbAsistenteReparador.SelectedIndex = -1;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (cmbAsistenteReparador.SelectedIndex >= 0)
            {
                int? idAsistenteReparador = int.Parse(cmbAsistenteReparador.SelectedValue.ToString());
                string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

                DateTime valueDesde = new DateTime();
                DateTime.TryParse(txtFechaDesde.Text, out valueDesde);
                DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

                DateTime valueHasta = new DateTime();
                DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
                DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();


                LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                DataTable result = problemaBLL.ListarProblema(idAsistenteReparador, estado, fechaRegistroDesde, fechaRegistroHasta);

                DataView dvHardware = new DataView(result);
                dvHardware.RowFilter = "TipoProblema like '%hardware%'";
                DataView dvSoftware = new DataView(result);
                dvSoftware.RowFilter = "TipoProblema like '%software%'";
                DataView dvOtros = new DataView(result);
                dvOtros.RowFilter = "TipoProblema like '%otros%'";
                
                gridHardware.DataSource = dvHardware.ToTable();
                tabHardware.Text = "Hardware (" + dvHardware.Count.ToString() + ")";
                gridHardware.CurrentCell = null;
                gridHardware.ClearSelection();                
                
                gridSoftware.DataSource = dvSoftware.ToTable();
                tabSoftware.Text = "Software (" + dvSoftware.Count.ToString() + ")";
                gridSoftware.CurrentCell = null;
                gridSoftware.ClearSelection();

                gridOtros.DataSource = dvOtros.ToTable();
                tabOtros.Text = "Otros (" + dvOtros.Count.ToString() + ")";
                gridOtros.CurrentCell = null;
                gridOtros.ClearSelection();

                //verificamos el usuario logueado
                if (cmbAsistenteReparador.SelectedValue.ToString().Equals(usuarioSistema.ID.ToString()))
                {
                    menuGridProblema.Enabled = true;
                }
                else
                {
                    menuGridProblema.Enabled = false;
                }

                LimpiarFormulario();
                LimpiarFormularioSolucion();
            }
            else
            {
                MessageBox.Show("Seleccione Asistente/Reparador", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void gridHardware_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridHardware.DataSource != null)
            {
                gridHardware.Columns["IdProblema"].Visible = false;
                gridHardware.Columns["TipoProblema"].Visible = false;
                gridHardware.Columns["Caso"].Visible = false;
                gridHardware.Columns["Prioridad"].Visible = false;
                gridHardware.Columns["Programa"].Visible = false;
                gridHardware.Columns["Reparador"].Visible = false;
                gridHardware.Columns["Descripcion"].Visible = false;
                gridHardware.Columns["Observaciones"].Visible = false;
                gridHardware.Columns["Solucion"].Visible = false;
                gridHardware.Columns["FechaRegistroSolucion"].Visible = false;
            }
        }

        private void gridSoftware_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridSoftware.DataSource != null)
            {
                gridSoftware.Columns["IdProblema"].Visible = false;
                gridSoftware.Columns["TipoProblema"].Visible = false;
                gridSoftware.Columns["Caso"].Visible = false;
                gridSoftware.Columns["Prioridad"].Visible = false;
                gridSoftware.Columns["Programa"].Visible = false;
                gridSoftware.Columns["Reparador"].Visible = false;
                gridSoftware.Columns["Descripcion"].Visible = false;
                gridSoftware.Columns["Observaciones"].Visible = false;
                gridSoftware.Columns["Solucion"].Visible = false;
                gridSoftware.Columns["FechaRegistroSolucion"].Visible = false;
            }
        }

        private void gridOtros_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridOtros.DataSource != null)
            {
                gridOtros.Columns["IdProblema"].Visible = false;
                gridOtros.Columns["TipoProblema"].Visible = false;
                gridOtros.Columns["Caso"].Visible = false;
                gridOtros.Columns["Prioridad"].Visible = false;
                gridOtros.Columns["Programa"].Visible = false;
                gridOtros.Columns["Reparador"].Visible = false;
                gridOtros.Columns["Descripcion"].Visible = false;
                gridOtros.Columns["Observaciones"].Visible = false;
                gridOtros.Columns["Solucion"].Visible = false;
                gridOtros.Columns["FechaRegistroSolucion"].Visible = false;
            }
        }

        private string CalcularPrioridad(int valor)
        {
            string result = string.Empty;

            switch (valor)
            {
                case 1:
                    result = "Alta";
                    break;
                case 2:
                    result = "Media";
                    break;
                case 3:
                    result = "Baja";
                    break;
            }

            return result;
        }

        private void MostrarDatosProblemaHardware()
        {
            if (gridHardware.SelectedRows.Count > 0)
            {
                //AccesoDatos.PROBLEMA selectedProblema = gridHardware.SelectedRows[0].DataBoundItem as AccesoDatos.PROBLEMA;
                DataRowView selectedViewRow = gridHardware.SelectedRows[0].DataBoundItem as DataRowView;
                DataRow selectedRow = selectedViewRow.Row;

                if (selectedRow != null)
                {
                    txtFechaRegistroProblema.Text = selectedRow["FechaRegistro"] != null ? selectedRow["FechaRegistro"].ToString().Trim() : string.Empty;
                    txtPrioridad.Text = selectedRow["Prioridad"] != null ? selectedRow["Prioridad"].ToString().Trim() : string.Empty;
                    txtCaso.Text = selectedRow["Caso"] != null ? selectedRow["Caso"].ToString().Trim() : string.Empty;
                    txtUsuario.Text = selectedRow["Usuario"] != null ? selectedRow["Usuario"].ToString().Trim() : string.Empty;
                    txtEstado.Text = selectedRow["Estado"] != null ? selectedRow["Estado"].ToString().Trim() : string.Empty;
                    txtDescripcion.Text = selectedRow["Descripcion"] != null ? selectedRow["Descripcion"].ToString().Trim() : string.Empty;
                    txtObservaciones.Text = selectedRow["Observaciones"] != null ? selectedRow["Observaciones"].ToString().Trim() : string.Empty;

                    if (!string.IsNullOrWhiteSpace(txtEstado.Text))
                    {
                        string estado = txtEstado.Text;

                        switch (estado)
                        {
                            case "Pendiente":
                                if (cmbAsistenteReparador.SelectedValue.ToString().Equals(usuarioSistema.ID.ToString()))
                                {                                    
                                    gbSolucion.Enabled = true;
                                }
                                else
                                {
                                    gbSolucion.Enabled = false;
                                }
                                LimpiarFormularioSolucion();
                                break;
                            case "Atendido":
                                txtDescipcionSolucion.Text = selectedRow["Solucion"] != null ? selectedRow["Solucion"].ToString().Trim() : string.Empty; 
                                txtFechaRegistroSolucion.Text = selectedRow["FechaRegistroSolucion"] != null ? selectedRow["FechaRegistroSolucion"].ToString().Trim() : string.Empty;
                                gbSolucion.Enabled = false;
                                break;
                            case "Rechazado":
                                gbSolucion.Enabled = false;
                                break;
                        }
                    }
                }
            }
        }

        private void MostrarDatosProblemaSoftware()
        {
            if (gridSoftware.SelectedRows.Count > 0)
            {
                DataRowView selectedViewRow = gridSoftware.SelectedRows[0].DataBoundItem as DataRowView;
                DataRow selectedRow = selectedViewRow.Row;

                if (selectedRow != null)
                {
                    txtFechaRegistroProblema.Text = selectedRow["FechaRegistro"] != null ? selectedRow["FechaRegistro"].ToString().Trim() : string.Empty;
                    txtPrioridad.Text = selectedRow["Prioridad"] != null ? selectedRow["Prioridad"].ToString().Trim() : string.Empty;
                    txtCaso.Text = selectedRow["Caso"] != null ? selectedRow["Caso"].ToString().Trim() : string.Empty;
                    txtUsuario.Text = selectedRow["Usuario"] != null ? selectedRow["Usuario"].ToString().Trim() : string.Empty;
                    txtEstado.Text = selectedRow["Estado"] != null ? selectedRow["Estado"].ToString().Trim() : string.Empty;
                    txtPrograma.Text = selectedRow["Programa"] != null ? selectedRow["Programa"].ToString().Trim() : string.Empty;
                    txtDescripcion.Text = selectedRow["Descripcion"] != null ? selectedRow["Descripcion"].ToString().Trim() : string.Empty;
                    txtObservaciones.Text = selectedRow["Observaciones"] != null ? selectedRow["Observaciones"].ToString().Trim() : string.Empty;

                    if (!string.IsNullOrWhiteSpace(txtEstado.Text))
                    {
                        string estado = txtEstado.Text;

                        switch (estado)
                        {
                            case "Pendiente":
                                if (cmbAsistenteReparador.SelectedValue.ToString().Equals(usuarioSistema.ID.ToString()))
                                {                                    
                                    gbSolucion.Enabled = true;
                                }
                                else
                                {
                                    gbSolucion.Enabled = false;
                                }
                                LimpiarFormularioSolucion();
                                break;
                            case "Atendido":
                                txtDescipcionSolucion.Text = selectedRow["Solucion"] != null ? selectedRow["Solucion"].ToString().Trim() : string.Empty;
                                txtFechaRegistroSolucion.Text = selectedRow["FechaRegistroSolucion"] != null ? selectedRow["FechaRegistroSolucion"].ToString().Trim() : string.Empty;
                                gbSolucion.Enabled = false;
                                break;
                            case "Rechazado":
                                gbSolucion.Enabled = false;
                                break;
                        }
                    }
                }
            }
        }

        private void MostrarDatosProblemaOtros()
        {
            if (gridOtros.SelectedRows.Count > 0)
            {
                DataRowView selectedViewRow = gridOtros.SelectedRows[0].DataBoundItem as DataRowView;
                DataRow selectedRow = selectedViewRow.Row;

                if (selectedRow != null)
                {
                    txtFechaRegistroProblema.Text = selectedRow["FechaRegistro"] != null ? selectedRow["FechaRegistro"].ToString().Trim() : string.Empty;
                    txtPrioridad.Text = selectedRow["Prioridad"] != null ? selectedRow["Prioridad"].ToString().Trim() : string.Empty;
                    txtCaso.Text = selectedRow["Caso"] != null ? selectedRow["Caso"].ToString().Trim() : string.Empty;
                    txtUsuario.Text = selectedRow["Usuario"] != null ? selectedRow["Usuario"].ToString().Trim() : string.Empty;
                    txtEstado.Text = selectedRow["Estado"] != null ? selectedRow["Estado"].ToString().Trim() : string.Empty;
                    txtPrograma.Text = selectedRow["Programa"] != null ? selectedRow["Programa"].ToString().Trim() : string.Empty;
                    txtDescripcion.Text = selectedRow["Descripcion"] != null ? selectedRow["Descripcion"].ToString().Trim() : string.Empty;
                    txtObservaciones.Text = selectedRow["Observaciones"] != null ? selectedRow["Observaciones"].ToString().Trim() : string.Empty;

                    if (!string.IsNullOrWhiteSpace(txtEstado.Text))
                    {
                        string estado = txtEstado.Text;

                        switch (estado)
                        {
                            case "Pendiente":
                                if (cmbAsistenteReparador.SelectedValue.ToString().Equals(usuarioSistema.ID.ToString()))
                                {
                                    gbSolucion.Enabled = true;
                                }
                                else
                                {
                                    gbSolucion.Enabled = false;
                                }
                                LimpiarFormularioSolucion();
                                break;
                            case "Atendido":
                                txtDescipcionSolucion.Text = selectedRow["Solucion"] != null ? selectedRow["Solucion"].ToString().Trim() : string.Empty;
                                txtFechaRegistroSolucion.Text = selectedRow["FechaRegistroSolucion"] != null ? selectedRow["FechaRegistroSolucion"].ToString().Trim() : string.Empty;
                                gbSolucion.Enabled = false;
                                break;
                            case "Rechazado":
                                gbSolucion.Enabled = false;
                                break;
                        }
                    }
                }
            }
        }

        private void gridHardware_SelectionChanged(object sender, EventArgs e)
        {
            MostrarDatosProblemaHardware();
        }

        private void gridSoftware_SelectionChanged(object sender, EventArgs e)
        {
            MostrarDatosProblemaSoftware();
        }

        private void gridOtros_SelectionChanged(object sender, EventArgs e)
        {
            MostrarDatosProblemaOtros();
        }

        private void gridHardware_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && e.Button == MouseButtons.Right)
            {
                DataRowView selectedViewRow = gridHardware.Rows[e.RowIndex].DataBoundItem as DataRowView;
                DataRow selectedRow = selectedViewRow.Row;

                if (selectedRow["Estado"] != null)
                {
                    if (selectedRow["Estado"].ToString() == "Pendiente")
                    {
                        gridHardware.Rows[e.RowIndex].Selected = true;
                        Rectangle r = gridHardware.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);

                        menuGridProblema.Tag = tabHardware.Text;
                        menuGridProblema.Show((Control)sender, (r.Left + e.X), (r.Top + e.Y));
                    } 
                }
            }
        }

        private void gridSoftware_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && e.Button == MouseButtons.Right)
            {
                DataRowView selectedViewRow = gridSoftware.Rows[e.RowIndex].DataBoundItem as DataRowView;
                DataRow selectedRow = selectedViewRow.Row;

                if (selectedRow["Estado"] != null)
                {
                    if (selectedRow["Estado"].ToString()  == "Pendiente")
                    {
                        gridSoftware.Rows[e.RowIndex].Selected = true;
                        Rectangle r = gridSoftware.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);

                        menuGridProblema.Tag = tabSoftware.Text;
                        menuGridProblema.Show((Control)sender, (r.Left + e.X), (r.Top + e.Y));
                    } 
                }
            }
        }

        private void gridOtros_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && e.Button == MouseButtons.Right)
            {
                DataRowView selectedViewRow = gridOtros.Rows[e.RowIndex].DataBoundItem as DataRowView;
                DataRow selectedRow = selectedViewRow.Row;

                if (selectedRow["Estado"] != null)
                {
                    if (selectedRow["Estado"].ToString() == "Pendiente")
                    {
                        gridOtros.Rows[e.RowIndex].Selected = true;
                        Rectangle r = gridOtros.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);

                        menuGridProblema.Tag = tabOtros.Text;
                        menuGridProblema.Show((Control)sender, (r.Left + e.X), (r.Top + e.Y));
                    }
                }
            }
        }

        private void btnRegistrarSolucion_Click(object sender, EventArgs e)
        {
            TabPage selectedTab = tabProblema.SelectedTab;
            AccesoDatos.PROBLEMA selectedProblema = new AccesoDatos.PROBLEMA();
            AccesoDatos.USUARIO selectedUsuario = cmbAsistenteReparador.SelectedItem as AccesoDatos.USUARIO;

            if (selectedTab.Text.StartsWith("Hardware"))
            {
                if (gridHardware.SelectedRows.Count > 0)
                {
                    int idProblema = int.Parse(gridHardware.SelectedRows[0].Cells["idProblema"].Value.ToString());
                    LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                    selectedProblema = problemaBLL.GetProblema(idProblema);
                }
            }
            else if (selectedTab.Text.StartsWith("Software"))
            {
                if (gridSoftware.SelectedRows.Count > 0)
                {
                    int idProblema = int.Parse(gridSoftware.SelectedRows[0].Cells["idProblema"].Value.ToString());
                    LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                    selectedProblema = problemaBLL.GetProblema(idProblema);
                }
            }
            else if (selectedTab.Text.StartsWith("Otros"))
            {
                if (gridOtros.SelectedRows.Count > 0)
                {
                    int idProblema = int.Parse(gridOtros.SelectedRows[0].Cells["idProblema"].Value.ToString());
                    LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                    selectedProblema = problemaBLL.GetProblema(idProblema);
                }
            }

            if (selectedProblema != null)
            {
                if (selectedProblema.ID > 0)
                {
                    if (!string.IsNullOrWhiteSpace(txtDescipcionSolucion.Text))
                    {

                        LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                        problemaBLL.RegistrarSolucion(selectedProblema, txtDescipcionSolucion.Text, (usuarioSistema.NOMBRECOMPLETO != null ? usuarioSistema.NOMBRECOMPLETO.Trim() : string.Empty));

                        MessageBox.Show("Solución registrada", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                        List<AccesoDatos.PROBLEMA> lista = new List<AccesoDatos.PROBLEMA>();

                        //if (selectedTab.Text.StartsWith("Hardware"))
                        //{
                        //    lista = problemaBLL.ListarProblemaHardwareReparador(selectedUsuario);
                        //    tabHardware.Text = "Hardware (" + lista.Count.ToString() + ")";

                        //    gridHardware.DataSource = lista;
                        //    gridHardware.ClearSelection();
                        //}
                        //else if (selectedTab.Text.StartsWith("Software"))
                        //{
                        //    lista = problemaBLL.ListarProblemaSoftwareReparador(selectedUsuario);
                        //    tabSoftware.Text = "Software (" + lista.Count.ToString() + ")";

                        //    gridSoftware.DataSource = lista;
                        //    gridSoftware.ClearSelection();
                        //}

                        btnBuscar_Click(sender, e);

                        LimpiarFormularioSolucion();
                    }
                    else
                    {
                        MessageBox.Show("Ingrese el detalle de la solución", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                } 
            }
        }

        private void LimpiarFormulario()
        {
            gbDetalleProblema.Tag = null;
            txtFechaRegistroProblema.ResetText();
            txtPrioridad.ResetText();
            txtUsuario.ResetText();
            txtCaso.ResetText();
            txtEstado.ResetText();
            txtPrograma.ResetText();
            txtDescripcion.ResetText();
            txtObservaciones.ResetText();
        }

        private void LimpiarFormularioSolucion()
        {
            txtDescipcionSolucion.ResetText();
            txtFechaRegistroSolucion.ResetText();
        }
       
        private void chkEstado_CheckedChanged(object sender, EventArgs e)
        {
            if (chkEstado.Checked)
            {
                cmbEstado.Enabled = true;
                ListarEstado();
            }
            else
            {
                cmbEstado.Enabled = false;
                cmbEstado.SelectedIndex = -1;
            }            
        }

        private void ListarEstado()
        {
            List<string> listaEstado = new List<string>();
            listaEstado.Add("Atendido");
            listaEstado.Add("Pendiente");
            listaEstado.Add("Rechazado");
            cmbEstado.DataSource = listaEstado;
            cmbEstado.SelectedIndex = -1;
        }

        private void chkRegistrado_CheckedChanged(object sender, EventArgs e)
        {
            if (chkRegistrado.Checked)
            {
                txtFechaDesde.Enabled = true;
                txtFechaHasta.Enabled = true;
            }
            else
            {
                txtFechaDesde.Enabled = false;
                txtFechaHasta.Enabled = false;
            }

            txtFechaDesde.ResetText();
            txtFechaHasta.ResetText();
        }

        private void tabProblema_SelectedIndexChanged(object sender, EventArgs e)
        {
            string tabText = tabProblema.SelectedTab.Text;

            if(tabText.StartsWith("Hardware"))
            {
                gridHardware.CurrentCell = null;    
                gridHardware.ClearSelection();
                            
                
            }
            else if(tabText.StartsWith("Software"))
            {
                gridSoftware.CurrentCell = null;
                gridSoftware.ClearSelection();
                
            }
            else if (tabText.StartsWith("Otros"))
            {
                gridOtros.CurrentCell = null;
                gridOtros.ClearSelection();
            }

            LimpiarFormulario();
            LimpiarFormularioSolucion();
        }

        private void toolStripRechazar_Click(object sender, EventArgs e)
        {
            ContextMenuStrip menuStrip = toolStripRechazar.Owner as ContextMenuStrip;
            string tabName = menuStrip.Tag.ToString();

            if (!string.IsNullOrWhiteSpace(tabName))
            {
                if (tabName.StartsWith("Hardware"))
                {
                    if (gridHardware.SelectedRows.Count > 0)
                    {
                        DataRowView selectedViewRow = gridHardware.SelectedRows[0].DataBoundItem as DataRowView;
                        DataRow selectedRow = selectedViewRow.Row;

                        if (selectedRow != null)
                        {
                            if (selectedRow["IdProblema"] != null)
                            {
                                int idProblema = int.Parse(selectedRow["IdProblema"].ToString());
                                RegistroRechazoProblema iuRegistroRechazo = new RegistroRechazoProblema(idProblema, usuarioSistema);
                                iuRegistroRechazo.ShowDialog(this);

                                int? idAsistenteReparador = int.Parse(cmbAsistenteReparador.SelectedValue.ToString());
                                string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

                                DateTime valueDesde = new DateTime();
                                DateTime.TryParse(txtFechaDesde.Text, out valueDesde);
                                DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

                                DateTime valueHasta = new DateTime();
                                DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
                                DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();

                                LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                                DataTable result = problemaBLL.ListarProblema(idAsistenteReparador, estado, fechaRegistroDesde, fechaRegistroHasta);

                                DataView dvHardware = new DataView(result);
                                dvHardware.RowFilter = "TipoProblema like '%hardware%'";

                                gridHardware.DataSource = dvHardware.ToTable();
                                tabHardware.Text = "Hardware (" + dvHardware.Count.ToString() + ")";
                                gridHardware.CurrentCell = null;
                                gridHardware.ClearSelection();

                                LimpiarFormulario();
                                LimpiarFormularioSolucion();
                            }
                        }
                    }
                }
                else if (tabName.StartsWith("Software"))
                {
                    if (gridSoftware.SelectedRows.Count > 0)
                    {
                        DataRowView selectedViewRow = gridSoftware.SelectedRows[0].DataBoundItem as DataRowView;
                        DataRow selectedRow = selectedViewRow.Row;

                        if (selectedRow != null)
                        {
                            if (selectedRow["IdProblema"] != null)
                            {
                                int idProblema = int.Parse(selectedRow["IdProblema"].ToString());
                                RegistroRechazoProblema iuRegistroRechazo = new RegistroRechazoProblema(idProblema, usuarioSistema);
                                iuRegistroRechazo.ShowDialog(this);

                                int? idAsistenteReparador = int.Parse(cmbAsistenteReparador.SelectedValue.ToString());
                                string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

                                DateTime valueDesde = new DateTime();
                                DateTime.TryParse(txtFechaDesde.Text, out valueDesde);
                                DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

                                DateTime valueHasta = new DateTime();
                                DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
                                DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();

                                LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                                DataTable result = problemaBLL.ListarProblema(idAsistenteReparador, estado, fechaRegistroDesde, fechaRegistroHasta);

                                DataView dvSoftware = new DataView(result);
                                dvSoftware.RowFilter = "TipoProblema like '%software%'";

                                gridSoftware.DataSource = dvSoftware.ToTable();
                                tabSoftware.Text = "Software (" + dvSoftware.Count.ToString() + ")";
                                gridSoftware.CurrentCell = null;
                                gridSoftware.ClearSelection();

                                LimpiarFormulario();
                                LimpiarFormularioSolucion();
                            }
                        }
                    }
                }
                else if (tabName.StartsWith("Otros"))
                {
                    if (gridOtros.SelectedRows.Count > 0)
                    {
                        DataRowView selectedViewRow = gridOtros.SelectedRows[0].DataBoundItem as DataRowView;
                        DataRow selectedRow = selectedViewRow.Row;

                        if (selectedRow != null)
                        {
                            if (selectedRow["IdProblema"] != null)
                            {
                                int idProblema = int.Parse(selectedRow["IdProblema"].ToString());
                                RegistroRechazoProblema iuRegistroRechazo = new RegistroRechazoProblema(idProblema, usuarioSistema);
                                iuRegistroRechazo.ShowDialog(this);

                                int? idAsistenteReparador = int.Parse(cmbAsistenteReparador.SelectedValue.ToString());
                                string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

                                DateTime valueDesde = new DateTime();
                                DateTime.TryParse(txtFechaDesde.Text, out valueDesde);
                                DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

                                DateTime valueHasta = new DateTime();
                                DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
                                DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();

                                LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                                DataTable result = problemaBLL.ListarProblema(idAsistenteReparador, estado, fechaRegistroDesde, fechaRegistroHasta);

                                DataView dvOtros = new DataView(result);
                                dvOtros.RowFilter = "TipoProblema like '%otros%'";

                                gridOtros.DataSource = dvOtros.ToTable();
                                tabOtros.Text = "Otros (" + dvOtros.Count.ToString() + ")";
                                gridOtros.CurrentCell = null;
                                gridOtros.ClearSelection();

                                LimpiarFormulario();
                                LimpiarFormularioSolucion();
                            }
                        }
                    }
                }
            }
        }

        private void modificarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ContextMenuStrip menuStrip = toolStripRechazar.Owner as ContextMenuStrip;
            string tabName = menuStrip.Tag.ToString();

            if (!string.IsNullOrWhiteSpace(tabName))
            {
                if (tabName.StartsWith("Hardware"))
                {
                    DataRowView selectedViewRow = gridHardware.SelectedRows[0].DataBoundItem as DataRowView;
                    DataRow selectedRow = selectedViewRow.Row;

                    if (selectedRow != null)
                    {
                        if(selectedRow["IdProblema"] != null)
                        {
                            int idProblema = int.Parse(selectedRow["IdProblema"].ToString());
                            ModificarProblema iuModificarProblema = new ModificarProblema(idProblema, usuarioSistema);
                            iuModificarProblema.ShowDialog(this);

                            int? idAsistenteReparador = int.Parse(cmbAsistenteReparador.SelectedValue.ToString());
                            string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

                            DateTime valueDesde = new DateTime();
                            DateTime.TryParse(txtFechaDesde.Text, out valueDesde);
                            DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

                            DateTime valueHasta = new DateTime();
                            DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
                            DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();

                            LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                            DataTable result = problemaBLL.ListarProblema(idAsistenteReparador, estado, fechaRegistroDesde, fechaRegistroHasta);

                            DataView dvHardware = new DataView(result);
                            dvHardware.RowFilter = "TipoProblema like '%hardware%'";

                            gridHardware.DataSource = dvHardware.ToTable();
                            tabHardware.Text = "Hardware (" + dvHardware.Count.ToString() + ")";
                            gridHardware.CurrentCell = null;
                            gridHardware.ClearSelection();

                            LimpiarFormulario();
                            LimpiarFormularioSolucion();

                        }
                    }
                }
                else if (tabName.StartsWith("Software"))
                {
                    DataRowView selectedViewRow = gridSoftware.SelectedRows[0].DataBoundItem as DataRowView;
                    DataRow selectedRow = selectedViewRow.Row;

                    if (selectedRow != null)
                    {
                        if (selectedRow["IdProblema"] != null)
                        {
                            int idProblema = int.Parse(selectedRow["IdProblema"].ToString());
                            ModificarProblema iuModificarProblema = new ModificarProblema(idProblema, usuarioSistema);
                            iuModificarProblema.ShowDialog(this);

                            int? idAsistenteReparador = int.Parse(cmbAsistenteReparador.SelectedValue.ToString());
                            string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

                            DateTime valueDesde = new DateTime();
                            DateTime.TryParse(txtFechaDesde.Text, out valueDesde);
                            DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

                            DateTime valueHasta = new DateTime();
                            DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
                            DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();

                            LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                            DataTable result = problemaBLL.ListarProblema(idAsistenteReparador, estado, fechaRegistroDesde, fechaRegistroHasta);

                            DataView dvSoftware = new DataView(result);
                            dvSoftware.RowFilter = "TipoProblema like '%software%'";

                            gridSoftware.DataSource = dvSoftware.ToTable();
                            tabSoftware.Text = "Software (" + dvSoftware.Count.ToString() + ")";
                            gridSoftware.CurrentCell = null;
                            gridSoftware.ClearSelection();

                            LimpiarFormulario();
                            LimpiarFormularioSolucion();
                        }
                    }
                }
                else if (tabName.StartsWith("Otros"))
                {
                    DataRowView selectedViewRow = gridOtros.SelectedRows[0].DataBoundItem as DataRowView;
                    DataRow selectedRow = selectedViewRow.Row;

                    if (selectedRow != null)
                    {
                        if (selectedRow["IdProblema"] != null)
                        {
                            int idProblema = int.Parse(selectedRow["IdProblema"].ToString());
                            ModificarProblema iuModificarProblema = new ModificarProblema(idProblema, usuarioSistema);
                            iuModificarProblema.ShowDialog(this);

                            int? idAsistenteReparador = int.Parse(cmbAsistenteReparador.SelectedValue.ToString());
                            string estado = cmbEstado.SelectedIndex >= 0 ? cmbEstado.SelectedItem.ToString() : null;

                            DateTime valueDesde = new DateTime();
                            DateTime.TryParse(txtFechaDesde.Text, out valueDesde);
                            DateTime? fechaRegistroDesde = !valueDesde.Equals(DateTime.MinValue) ? valueDesde : new Nullable<DateTime>();

                            DateTime valueHasta = new DateTime();
                            DateTime.TryParse(txtFechaHasta.Text, out valueHasta);
                            DateTime? fechaRegistroHasta = !valueHasta.Equals(DateTime.MinValue) ? valueHasta : new Nullable<DateTime>();

                            LogicaNegocio.ProblemaBLL problemaBLL = new LogicaNegocio.ProblemaBLL();
                            DataTable result = problemaBLL.ListarProblema(idAsistenteReparador, estado, fechaRegistroDesde, fechaRegistroHasta);

                            DataView dvOtros = new DataView(result);
                            dvOtros.RowFilter = "TipoProblema like '%otros%'";

                            gridOtros.DataSource = dvOtros.ToTable();
                            tabOtros.Text = "Otros (" + dvOtros.Count.ToString() + ")";
                            gridOtros.CurrentCell = null;
                            gridOtros.ClearSelection();

                            LimpiarFormulario();
                            LimpiarFormularioSolucion();
                        }
                    }
                }
            }
        }

        private void cmbAsistenteReparador_SelectionChangeCommitted(object sender, EventArgs e)
        {
            LimpiarFormulario();
            LimpiarFormularioSolucion();
            gridHardware.DataSource = null;
            gridSoftware.DataSource = null;
            gridOtros.DataSource = null;
        }
    }
}
